import javax.swing.*;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;

public class ViewManager extends Canvas{
	
	CA controlAmbiental;
	Image rnorte;
	Image roeste;
	Image rsur;
	Image reste;
	Color vacio = Color.WHITE;
	Color pared = Color.BLACK;
	
	public ViewManager(CA controlAmbiental){
		this.controlAmbiental = controlAmbiental;
		rnorte = new ImageIcon(getClass().getResource("robot1.png")).getImage();
		roeste = new ImageIcon(getClass().getResource("robot2.png")).getImage();
		rsur = new ImageIcon(getClass().getResource("robot3.png")).getImage();
		reste = new ImageIcon(getClass().getResource("robot4.png")).getImage();
	}
	
	public void restart(){
		for(int i = 0; i < controlAmbiental.getMapa().length; i++){
			for (int j = 0; j<controlAmbiental.getMapa().length;j++){
				controlAmbiental.setMapa(i, j, 0);
			}
		}
		controlAmbiental.setMapa(1, 1, 2);
		for(int i = 0; i < controlAmbiental.getMapa().length; i++){
			for (int j = 0; j<controlAmbiental.getMapa().length;j++){
				System.out.print(" "+controlAmbiental.getMapa()[i][j]);
			}
			System.out.println();
		}
	}
	
	public void paint(Graphics g){
		int[][] mapa = 	this.controlAmbiental.getMapa();
		super.paint(g);
		//Diferencia entre paredes horizontales detectadas, no detectadas y espacios y dibuja.
		for( int y = 0 ; y < mapa.length ; y+=2 ){
			int m = 1;
			for( int x=1 ; x < mapa.length ; x+=2){
				switch (mapa[x][y]){
					case 0: g.setColor(vacio);
							g.drawLine((x-m)*100, y*50, (x-m)*100+100, y*50);
							m++;
							break;
					case 1: g.setColor(pared);
							g.drawLine((x-m)*100, y*50, (x-m)*100+100, y*50);
							m++;
							break;
						}
			}
		}
		//Diferencia entre paredes verticales detectadas, no detectadas y espacios y dibuja.
    	for( int x = 0 ; x < mapa.length ; x+=2){
    		int m = 1;
    		for( int y=1 ; y < mapa.length ; y+=2 ){
    			switch (mapa[x][y]){
				case 0: g.setColor(vacio);
						g.drawLine(x*50, (y-m)*100, x*50, (y-m)*100+100);
						m++;
						break;
				case 1: g.setColor(pared);
						g.drawLine(x*50, (y-m)*100, x*50, (y-m)*100+100);
						m++;
						break;
    			}
    		}
    	}
    	
    	//Ubica donde esta el robot en el mapa y dibuja segun la orientacion.
    	for( int y = 1 ; y < mapa.length ; y+=2){
    		for( int x = 1 ; x < mapa.length ; x+=2){
    			if(mapa[x][y] != 0){
    				switch (mapa[x][y]){
    					case 1: g.drawImage(rnorte, ((x-1)*50 + 10), ((y-1)*50 + 10), 80, 80, null);
    							break;
    					case 2: g.drawImage(roeste, ((x-1)*50 + 10), ((y-1)*50 + 10), 80, 80, null);
								break;
    					case 3: g.drawImage(rsur, ((x-1)*50 + 10), ((y-1)*50 + 10), 80, 80, null);
								break;
    					case 4: g.drawImage(reste, ((x-1)*50 + 10), ((y-1)*50 + 10), 80, 80, null);
								break;
    				}
    			}
    		}
    	}
	}
}
